The Hypertext Transfer Protocol (“HTTP”), defined in the Internet Engineering Task Force's Request For Comments number 2616, published June 1999 (“IETF RFC 2616”) describes a simple, generic, stateless application-level protocol that supports a large proportion of the diverse services available on the World-Wide Web. The services available, and application deployment frameworks to support the services, have become increasingly sophisticated, and correspondingly difficult to test and debug. While early services were simple enough to test manually (e.g., by loading a Uniform Resource Locator or “URL” and confirming that the correct document was presented), contemporary web applications often involve extended request-response sequences threaded together with complicated logic, so it is infeasible to test every possible scenario manually.
Automatic testing has taken up much of the load: a testing program is configured to emulate a web browser and issue a sequence of requests, checking the response to each request to ensure that it contains expected information. This approach can detect application failures that would be visible to an end user, but cannot distinguish server-side states that lead to the same user result. For example, a web application may request a username and password before performing a task. If either the username or password is incorrect, a “Please Re-try” message may be presented. An automatic tester may be configured to send incorrect data for either the username or the password (or both), but cannot determine whether the error message is a result of the incorrect data transmitted, or of incorrect data handling at the server.
Another approach to testing web applications is to construct a synthetic environment within which the application is executed. A replica request is submitted, and the application's internal state can be monitored as it executes. This approach permits good visibility into the application's logic, but as execution environments become more complex, it becomes difficult to replicate them correctly, and synthetic environment anomalies (rather than actual web application bugs) may cause unexpected behavior.
Automatic test methods that permit the examination of web application execution within a true (not emulated) environment may improve software quality and reduce development time.